﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;
using Kaskelot.SP.Model.Client;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Kaskelot.SP.Services.Client.Mapping;
using Kaskelot.SP.Model.Client.Forms;
using Microsoft.SharePoint;
using Kaskelot.SP.Core;

namespace Kaskelot.SP.Services.Client
{
	[ServiceContract(Namespace = "http://Kaskelot.SP.Services")]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
	public class ClientByggnadService
	{
		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<ClientByggnad>> GetByggnader()
		{
			ClientServiceResult<IEnumerable<ClientByggnad>> csr = new ClientServiceResult<IEnumerable<ClientByggnad>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					IList<Byggnad> byggnader = svc.GetByggnader();
					IList<ClientByggnad> result = new List<ClientByggnad>();

					foreach (Byggnad b in byggnader)
					{
						result.Add(b.ToClientContract());
					}

					csr.Data = result;
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<GetForsamlingarResult>> GetForsamlingar(string valkretsId)
		{
			ClientServiceResult<IEnumerable<GetForsamlingarResult>> csr = new ClientServiceResult<IEnumerable<GetForsamlingarResult>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					IList<Forsamling> forsamlingar = null;
					if (String.IsNullOrEmpty(valkretsId))
						forsamlingar = svc.GetForsamlingar(null);
					else
						forsamlingar = svc.GetForsamlingar(new Guid(valkretsId));

					IList<GetForsamlingarResult> result = new List<GetForsamlingarResult>();

					foreach (Forsamling f in forsamlingar)
					{
						result.Add(new GetForsamlingarResult() { ForsamlingId = f.Id.ToString(), ForsamlingNamn = f.Namn });
					}

					csr.Data = result;
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<GetValdistriktResult>> GetValdistriktByForsamling(string forsamlingId)
		{
			ClientServiceResult<IEnumerable<GetValdistriktResult>> csr = new ClientServiceResult<IEnumerable<GetValdistriktResult>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					IList<Valdistrikt> valdistrikt = null;
					if (forsamlingId.IsGuid())
						valdistrikt = svc.GetValdistrikt(new Guid(forsamlingId));

					IList<GetValdistriktResult> result = new List<GetValdistriktResult>();

					foreach (Valdistrikt v in valdistrikt)
					{
						result.Add(new GetValdistriktResult() { ValdistriktId = v.Id.ToString(), ValdistriktNamn = v.Namn });
					}

					csr.Data = result.OrderByDescending(x => x.ValdistriktNamn);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<ByggnadSearchResult>> SearchByggnader(string namnPostNr, string typId, string valkretsId, string forsamlingId, string stadsdelId, string fritext, string visaInaktiva, string valdistriktId)
		{
			ClientServiceResult<IEnumerable<ByggnadSearchResult>> csr = new ClientServiceResult<IEnumerable<ByggnadSearchResult>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					ByggnadSearchParameters parameters = new ByggnadSearchParameters();

					if (!string.IsNullOrEmpty(namnPostNr))
						parameters.NamnPostNr = namnPostNr;
					if (!string.IsNullOrEmpty(typId))
						parameters.Typ = new Guid(typId);
					if (!string.IsNullOrEmpty(valkretsId))
						parameters.Valkrets = new Guid(valkretsId);
					if (!string.IsNullOrEmpty(forsamlingId))
						parameters.Forsamling = new Guid(forsamlingId);
					if (!string.IsNullOrEmpty(stadsdelId))
						parameters.Stadsdel = new Guid(stadsdelId);
					if (!string.IsNullOrEmpty(fritext))
						parameters.Fritext = fritext;
					if (!string.IsNullOrEmpty(visaInaktiva))
						parameters.VisaInaktiva = System.Convert.ToBoolean(visaInaktiva);
					if (!string.IsNullOrEmpty(valdistriktId))
						parameters.Valdistrikt = new Guid(valdistriktId);

					IList<ByggnadSearchResult> result = svc.SearchByggnader(parameters);

					if (result != null)
						csr.Data = result.OrderBy(x => x.ByggnadNamn).ToList();
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<ClientByggnad> GetByggnad(string id)
		{
			ClientServiceResult<ClientByggnad> csr = new ClientServiceResult<ClientByggnad>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					csr.Data = svc.GetByggnad(new Guid(id)).ToClientContract();
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> UpdateByggnad(ByggnadDetailsForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (!form.BesoksPostNr.IsValidPostNr())
						throw new ApplicationException("Ett besökspostnummer enligt formatet 123 45 krävs.");
					if (!form.LeveransPostNr.IsValidPostNr())
						throw new ApplicationException("Ett leveranspostnummer enligt formatet 123 45 krävs.");
					if (form.Epost.IsNonEmpty() && !form.Epost.IsValidEpost())
						throw new ArgumentException("Ej giltig epostadress.");

					if (form.Id.IsGuid())
					{
						Byggnad byggnad = svc.GetByggnad(new Guid(form.Id));
						svc.UpdateByggnad(byggnad.UpdateContract(form));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> CreateByggnad(ByggnadDetailsForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (!form.BesoksPostNr.IsValidPostNr())
						throw new ApplicationException("Ett besökspostnummer enligt formatet 123 45 krävs.");
					if (!form.LeveransPostNr.IsValidPostNr())
						throw new ApplicationException("Ett leveranspostnummer enligt formatet 123 45 krävs.");
					if (form.Epost.IsNonEmpty() && !form.Epost.IsValidEpost())
						throw new ArgumentException("Ej giltig epostadress.");

					Byggnad byggnad = new Byggnad()
					{
						SkapadAv = SPContext.Current.Web.CurrentUser.Name,
						Skapad = DateTime.Now,
						ValId = ApplicationContext.Current.Val.Id
					};

					csr.Data = svc.CreateByggnad(byggnad.UpdateContract(form)).ToString();
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<ClientByggnadHandelseLogg>> GetByggnadHandelseLoggByByggnadId(string id)
		{
			ClientServiceResult<IEnumerable<ClientByggnadHandelseLogg>> csr = new ClientServiceResult<IEnumerable<ClientByggnadHandelseLogg>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					var v = svc.GetByggnadHandelseLoggByByggnadId(new Guid(id)).Select(l => l.ToClientContract()).ToList();

					foreach (ClientByggnadHandelseLogg cphl in v)
					{
						cphl.Text = cphl.Text.Length > 65 ? cphl.Text.Substring(0, 60) + " (...)" : cphl.Text;
					}

					csr.Data = v;
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> CreateByggnadHandelseLogg(HandelseLoggForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					ByggnadHandelseLogg bhl = new ByggnadHandelseLogg()
					{
						SkapadAv = SPContext.Current.Web.CurrentUser.Name,
						Skapad = DateTime.Now,
						ValId = ApplicationContext.Current.Val.Id,
						Id = Guid.NewGuid()
					};
					bhl.UpdateContract(form);
					svc.CreateByggnadHandelseLogg(bhl);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> UpdateByggnadHandelseLogg(HandelseLoggForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						ByggnadHandelseLogg bhl = svc.GetByggnadHandelseLogg(new Guid(form.Id));
						svc.UpdateByggnadHandelseLogg(bhl.UpdateContract(form));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> DeleteByggnadHandelseLogg(HandelseLoggForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						svc.DeleteByggnadHandelseLogg(new Guid(form.Id));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<GetLokalListByByggnadView>> GetLokalListByByggnad(string id)
		{
			ClientServiceResult<IEnumerable<GetLokalListByByggnadView>> csr = new ClientServiceResult<IEnumerable<GetLokalListByByggnadView>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					csr.Data = svc.GetLokalListByByggnad(new Guid(id)).ToList();
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}
			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<GetMaterielListByByggnadView>> GetMaterielListByByggnad(string id)
		{
			ClientServiceResult<IEnumerable<GetMaterielListByByggnadView>> csr = new ClientServiceResult<IEnumerable<GetMaterielListByByggnadView>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					csr.Data = svc.GetMaterielListByByggnad(new Guid(id)).ToList().OrderBy(x => x.Beskrivning);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> CreateLokal(LokalForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					Lokal lokal = new Lokal()
					{
						SkapadAv = SPContext.Current.Web.CurrentUser.Name,
						Skapad = DateTime.Now,
						ValId = ApplicationContext.Current.Val.Id,
						Id = Guid.NewGuid()
					};
					lokal.UpdateContract(form);
					svc.CreateLokal(lokal);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> UpdateLokal(LokalForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						Lokal lokal = svc.GetLokal(new Guid(form.Id));
						svc.UpdateLokal(lokal.UpdateContract(form));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> DeleteLokal(LokalForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						svc.DeleteLokal(new Guid(form.Id));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> CreateMateriel(MaterielForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				if (form.FritextBeskrivning.Length > 190)
					throw new ApplicationException("Beskrivningen är för lång.");

				using (ByggnadService svc = new ByggnadService())
				{
					Materiel materiel = new Materiel()
					{
						SkapadAv = SPContext.Current.Web.CurrentUser.Name,
						Skapad = DateTime.Now,
						ValId = ApplicationContext.Current.Val.Id,
						Id = Guid.NewGuid()
					};
					materiel.UpdateContract(form);
					svc.CreateMateriel(materiel);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> UpdateMateriel(MaterielForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				if (form.FritextBeskrivning.Length > 190)
					throw new ApplicationException("Beskrivningen är för lång.");

				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						Materiel materiel = svc.GetMateriel(new Guid(form.Id));
						svc.UpdateMateriel(materiel.UpdateContract(form));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> DeleteMateriel(MaterielForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						svc.DeleteMateriel(new Guid(form.Id));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<ValdistriktSearchResult>> GetValdistrikt(string forsamlingId, string selectedId, string visaKopplade)
		{
			ClientServiceResult<IEnumerable<ValdistriktSearchResult>> csr = new ClientServiceResult<IEnumerable<ValdistriktSearchResult>>();

			try
			{
				using (BemanningService svc = new BemanningService())
				{
					ValdistriktSearchParameters vsp = new ValdistriktSearchParameters();
                    if (forsamlingId.IsGuid())
                        vsp.ForsamlingId = new Guid(forsamlingId);

                    if (selectedId.IsGuid())
                        vsp.SelectedValdistriktId = new Guid(selectedId);

					if (visaKopplade.IsNonEmpty())
					{
						bool b;
						Boolean.TryParse(visaKopplade, out b);
						vsp.EndastOkopplade = !b;
					}
					

					IEnumerable<ValdistriktSearchResult> valdistrikt = svc.ValdistriktSearch(vsp);

					csr.Data = valdistrikt.OrderBy(vd => vd.ValdistriktNamn);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<GetKontaktpersonListByByggnadView>> GetKontaktpersonListByByggnad(string id)
		{
			ClientServiceResult<IEnumerable<GetKontaktpersonListByByggnadView>> csr = new ClientServiceResult<IEnumerable<GetKontaktpersonListByByggnadView>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					csr.Data = svc.GetKontaktPersonListByByggnad(new Guid(id)).ToList();
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}
			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> CreateSkylt(SkyltForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				if (form.Beskrivning.Length > 190)
					throw new ApplicationException("Beskrivningen är för lång.");

				using (ByggnadService svc = new ByggnadService())
				{
					Skylt materiel = new Skylt()
					{
						SkapadAv = SPContext.Current.Web.CurrentUser.Name,
						Skapad = DateTime.Now,
						ValId = ApplicationContext.Current.Val.Id,
						Id = Guid.NewGuid()
					};
					materiel.UpdateContract(form);
					svc.CreateSkylt(materiel);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> UpdateSkylt(SkyltForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				if (form.Beskrivning.Length > 190)
					throw new ApplicationException("Beskrivningen är för lång.");

				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						Skylt skylt = svc.GetSkylt(new Guid(form.Id));
						svc.UpdateSkylt(skylt.UpdateContract(form));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> DeleteSkylt(SkyltForm form)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					if (form.Id.IsGuid())
					{
						svc.DeleteSkylt(new Guid(form.Id));
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<ClientSkylt>> GetSkyltListByByggnad(string byggnadId)
		{
			ClientServiceResult<IEnumerable<ClientSkylt>> csr = new ClientServiceResult<IEnumerable<ClientSkylt>>();

			try
			{
				using (ByggnadService svc = new ByggnadService())
				{
					csr.Data = svc.GetSkyltListByByggnad(new Guid(byggnadId)).Select(s => s.ToClientContract()).OrderBy(x => x.Beskrivning);
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<IEnumerable<ClientDokument>> GetDokumentListByByggnadId(string id)
		{
			ClientServiceResult<IEnumerable<ClientDokument>> csr = new ClientServiceResult<IEnumerable<ClientDokument>>();

			try
			{
				using (ByggnadService bSvc = new ByggnadService())
				{
					Byggnad byggnad = bSvc.GetByggnad(new Guid(id));
					DocumentService svc = new DocumentService();
					csr.Data = svc.GetDocumentsByByggnad(SPContext.Current.Site, byggnad).Select(d => d.ToClientContract()).ToList();
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}

		[OperationContract]
		[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public ClientServiceResult<string> DeleteDokument(string byggnadId, string dokumentId)
		{
			ClientServiceResult<string> csr = new ClientServiceResult<string>();

			try
			{
				int dokId = 0;
				if (byggnadId.IsGuid() && int.TryParse(dokumentId, out dokId))
				{
					using (ByggnadService svc = new ByggnadService())
					{
						Byggnad byggnad = svc.GetByggnad(new Guid(byggnadId));
						DocumentService docSvc = new DocumentService();
						docSvc.DeleteDocument(SPContext.Current.Site, byggnad, dokId);
					}
				}
			}
			catch (Exception ex)
			{
				csr.ErrorMessage = ex.Message;
				csr.HasError = true;
			}

			return csr;
		}
	}
}
